package com.social.credits.alipay;

import com.alipay.api.response.AlipayTradeCloseResponse;
import com.alipay.api.response.AlipayTradePagePayResponse;
import com.alipay.api.response.AlipayTradeQueryResponse;
import com.alipay.api.response.AlipayTradeRefundResponse;

import java.math.BigDecimal;
import java.util.Map;

/**
 * Created by wdq on 17-9-5.
 */
public interface ScAlipayService {

    String ALI_SUCCESS = "10000";
    String ALI_FAIL = "20000";

    /**
     * 支付宝支付(电脑网站支付)
     *
     * @param outTradeNo  商户订单号，商户网站订单系统中唯一订单号，必填
     * @param totalAmount 付款金额,保留小数后两位,必填
     * @param subject     订单名称，必填
     * @param body        商品描述，可空
     * @return response->code="10000":成功,code>"10000":异常
     * response->body:支付宝请求表单内容
     * <br/> 注意:body内容(表单内容)需要包在html -> content:text/html; charset=utf-8 中执行提交
     */
    AlipayTradePagePayResponse alipayTradePay(String outTradeNo, BigDecimal totalAmount, String subject, String body);

    /**
     * 交易关闭接口
     *
     * @param outTradeNo 商户订单号，商户网站订单系统中唯一订单号
     * @return response->code="10000":成功,code>"10000":异常
     */
    AlipayTradeCloseResponse alipayTradeClose(String outTradeNo);

    /**
     * 交易退款接口
     *
     * @param outTradeNo   商户订单号，商户网站订单系统中唯一订单号
     * @param refundAmount 退款金额
     * @param refundReason 退款原因
     * @return response->code="10000":成功,code>"10000":异常
     */
    AlipayTradeRefundResponse refund(String outTradeNo, BigDecimal refundAmount, String refundReason);

    /**
     * 订单查询
     *
     * @param outTradeNo 商户订单号，商户网站订单系统中唯一订单号
     * @param tradeNo    支付宝交易号  (请二选一设置)
     * @return response->code="10000":成功,code>"10000":异常
     */
    AlipayTradeQueryResponse alipayTradeQuery(String outTradeNo, String tradeNo);

    /**
     * 异步回调签名验证
     *
     * @param requestParams 来源与request,请求参数 request.getParameterMap()
     * @return
     */
    boolean validateSignature(Map<String, String[]> requestParams);
}
